package com.limit.rateLimit;

import com.limit.service.TimeWindowLimit;
import lombok.Data;

/**
 * @作者: 林江
 * @创建时间: 2023/12/20
 * @功能: 简单时间窗口算法，单位时间内通过的请求数。超过就限流。
 */
@Data
public class SimpleTimeWindow implements TimeWindowLimit {
    private long start = System.currentTimeMillis();
    private int req; // 请求数
    private int limit = 3; // 限制请求数阈值
    private int interval = 1000; // 时间窗口间隔

    @Override
    public synchronized boolean limit() { // 加锁
        long end = System.currentTimeMillis(); // 假设：0.5s~1s,2个请求
        if (end < start + interval) {
            if (req + 1 > limit) {
                return true; // true：表示限流了
            }
            req++;
            return false;
        } else {
            start = end;
            req = 0;
            return false;
        }
    }
}
